#include "interface.h"
#include "VM_Create_Itrfc.h"
#include "SD_Login_Itrfc.h"
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>

/* 函数功能：点击按钮“创建虚拟机“的动作
 * 入口参数：
 * 出口参数：无
 * 返 回 值 ：int
 *         SUCCESS  函数成功执行
 *         FAILURE  函数执行出错
 * 创建日期：2009年7月8号
 * 创 建 人 ：匡波 马小艳
 * 更新历史：暂无
 */
gint on_VMCreate_clicked(GtkWidget *widegt, gpointer data)
{
   GtkWidget *tree_view = NULL;
   GtkTreeModel *model = NULL;
   GtkTreeIter iter;
   GtkTreeSelection *select = NULL;
   
   int argc = 0;
   char ** argv = NULL;

    /* 获取窗口的treeview 控件 */
   tree_view = glade_xml_get_widget (window, "SdVmTree");

    /* 获取用户要创建的虚拟机镜像 */
   select = gtk_tree_view_get_selection (GTK_TREE_VIEW(tree_view));

   if (gtk_tree_selection_get_selected(select, &model, &iter))
   {
	 /* TODO 创建虚拟机 */
   }
    
   else 
   {
       showDialog(NULL,
                  GTK_DIALOG_DESTROY_WITH_PARENT,
                  GTK_MESSAGE_ERROR,
                  GTK_BUTTONS_CLOSE,
                  "请选择镜像创建虚拟机!" );
	   
	   return FAILURE;
   }  
   
      /* 弹出敏感数据库登录界面 */
    call(&windowSDLogin, argc, argv, "06 SD_Login_Itrfc.glade", 0); 

    return SUCCESS;
}

/* 函数功能：点击按钮“查找镜像“的动作
 * 入口参数：
 * 出口参数：无
 * 返 回 值 ：int
 *         SUCCESS  函数成功执行
 *         FAILURE  函数执行出错
 * 创建日期：2009年7月8号
 * 创 建 人 ：匡波 马小艳
 * 更新历史：暂无
 */
gint on_ImageSearch_clicked(GtkWidget *widegt, gpointer data)
{   
   GtkWidget *entry_imagename = NULL;
   GtkWidget *tree_view = NULL;
   GtkTreeModel *model = NULL;
   GtkTreeIter iter;
   GtkTreeSelection *select = NULL;
   
   const gchar *imagename = NULL;
   
   gboolean valid = FALSE;
   gchar *vm_name = NULL;

   entry_imagename = glade_xml_get_widget(window, "entry1"); 
   imagename = gtk_entry_get_text(GTK_ENTRY(entry_imagename));
    
    if((strlen(imagename) == 0))
    {
        showDialog(NULL,
                   GTK_DIALOG_DESTROY_WITH_PARENT,
                   GTK_MESSAGE_ERROR,
                   GTK_BUTTONS_CLOSE,
                   "请填写镜像名进行搜索!" );
 
	    return FAILURE;
    } 

   
   /* 查找镜像 */
   tree_view = glade_xml_get_widget (window, "SdVmTree");
   model = gtk_tree_view_get_model(tree_view);cd ..
   select = gtk_tree_view_get_selection (GTK_TREE_VIEW(tree_view)); 

   if(gtk_tree_selection_get_selected(select, &model, &iter))
   {
      gtk_tree_selection_unselect_iter(select, &iter);
   }


   /* 获得树列表的第一项 */ 
   valid = gtk_tree_model_get_iter_first (model, &iter);

   while (valid)
   {
      /* 遍历整个列表，读取每一行 */
      gtk_tree_model_get (model, 
                          &iter, 
                          IMAGE_NAME, 
                          &vm_name,
                          -1);
#ifdef DEBUG
      g_print(" imagename = %s, vm_name = %s", imagename, vm_name);
#endif
      
      if (!strncmp( vm_name, imagename, strlen(imagename)))
      {
          gtk_tree_selection_select_iter(select, &iter);
      }

      g_free (vm_name);

      valid = gtk_tree_model_iter_next (model, &iter);
   }
  
   return SUCCESS;
}

/* 函数功能：点击按钮“退出“的动作
 * 入口参数：
 * 出口参数：无
 * 返 回 值：int
 *         SUCCESS  函数成功执行
 *         FAILURE  函数执行出错
 * 创建日期：2009年7月8号
 * 创 建 人 ：匡波 马小艳
 * 更新历史：暂无
 */
gint on_VMExit_clicked(GtkWidget *widegt, gpointer data)
{
	gint res = 0;
	
    res = showDialog(NULL,
                     GTK_DIALOG_DESTROY_WITH_PARENT,
                     GTK_MESSAGE_WARNING,
                     GTK_BUTTONS_OK_CANCEL,
                     "点击确定退出!\n" );

   if(res == GTK_RESPONSE_OK)
   {
   	  GtkWidget *win = NULL;
   	   
      win = glade_xml_get_widget(window, "window1");
      gtk_widget_destroy(win);
       
      gtk_main_quit();
   }
    
   return SUCCESS;
}

/* 函数功能：主函数，连接glade界面和界面控件的相关动作
 * 入口参数：
 * 出口参数：无
 * 返 回 值 ：int
 *         SUCCESS  函数成功执行
 *         FAILURE  函数执行出错
 * 创建日期：2009年7月8号
 * 创 建 人 ：马小艳
 * 更新历史：暂无
 */
int main(int argc, char **argv)
{
   gtk_init(&argc, &argv);
   
   window=glade_xml_new("05 VM_Create_Itrfc.glade",NULL,NULL);
   glade_xml_signal_autoconnect(window);
  
   /* 设置窗口listview控件 */
   treeView(window, "SdVmTree", LOCAL_IMAGE_LIST);
   
   flag = FALSE;

   gtk_main();
  
   return 0;
}
